/**
 * 转换时间工具
 *  @params time(Date):时间
 *  @params format(String):日期格式，如：yyyy-MM-dd HH:mm:ss
 *  @author gy
 *  @return 格式化后的日期，如：2019-04-09 11:11:11
 */
var format = function(time, format = 'yyyy-MM-dd HH:mm:ss') {
	if (!time) return '--'
	var t = new Date(time)
	var tf = function(i) {
		return (i < 10 ? '0' : '') + i
	}
	return format.replace(/yyyy|MM|dd|HH|mm|ss/g, function(a) {
		switch (a) {
			case 'yyyy':
				return tf(t.getFullYear())
				break
			case 'MM':
				return tf(t.getMonth() + 1)
				break
			case 'mm':
				return tf(t.getMinutes())
				break
			case 'dd':
				return tf(t.getDate())
				break
			case 'HH':
				return tf(t.getHours())
				break
			case 'ss':
				return tf(t.getSeconds())
				break
		}
	})
}
/**
 * 根据parentId解析数组
 *  @params data(Array):需要转化的数据，如：[{id,parentId,children},...]
 *  @params targetProperty(Object):根据哪些属性转换 如 {id:'数据的id属性名称',pid:'数据的父级id属性名称'}
 */
var toTree = function(data, targetProperty) {
	data.forEach(function(item) {
		delete item.children
	})
	// 将数据存储为 以 id 为 KEY 的 map 索引数据列
	if (targetProperty) {
		var map = {}
		data.forEach(function(item) {
			map[item[targetProperty.id]] = item
		})
		var val = []
		data.forEach(function(item) {
			var parent = map[item[targetProperty.pid]]
			if (parent) {
				;
				(parent.children || (parent.children = [])).push(item)
			} else {
				val.push(item)
			}
		})
	} else {
		var map = {}
		data.forEach(function(item) {
			map[item.value] = item
		})
		var val = []
		data.forEach(function(item) {
			// 以当前遍历项，的channelParentId,去map对象中找到索引的id
			var parent = map[item.channelParentId]
			// 如果找到索引，那么说明此项不在顶级当中,那么需要把此项添加到，他对应的父级中
			if (parent) {
				;
				(parent.children || (parent.children = [])).push(item)
			} else {
				//如果没有在map中找到对应的索引ID,那么直接把 当前的item添加到 val结果集中，作为顶级
				val.push(item)
			}
		})
	}
	return val
}
/**
 * 根据parentId查找数据
 *  @params data(Array):全部数据，如：[{id,parentId,children},...]
 *  @params channelParentId(Number):父节点id
 */
var familyTree = function(arr, channelParentId) {
	var temp = []
	var forFn = function(arr, channelParentId) {
		for (var i = 0; i < arr.length; i++) {
			var item = arr[i]
			if (item.value == channelParentId) {
				temp.push(item)
			} else {
				forFn(arr, item.channelParentId)
			}
		}
	}
	forFn(arr, channelParentId)
	return temp
}

/**
 * 递归替换某些属性
 *  @params data(Array):需要转化的数据，如：[{id,parentId,children},...]
 *  @params targetProperty(Object):根据需要替换的属性 如 {origin:'需要替换的属性',
 *                                                      npro:'替换后的属性',
 *                                                      deletePro:需要删除的属性['icon','title']}
 */
var replaceTo = function(data, targetProperty) {
	var tmp = []
	var forFn = function(data, targetProperty) {
		for (var key in data) {
			var item = data[key]
			tmp.push(item[targetProperty.origin])
			if ((item.children > 0 && typeof item.children === 'object') || typeof item.children === 'object') {
				forFn(item.children, targetProperty)
			}
		}
	}
	forFn(data, targetProperty)
	return tmp
}
/**
 * 打开浏览器tab
 * @params config(Object): {url:"链接地址",title:"标题",content:"内容"}
 */
export function openwin({ url = '', title = '资讯', content = '' }) {
	let OpenWindow = window.open(url, 'newwin', 'height=500, width=750') //写成一行
	if (url) {
		return
	}
	OpenWindow.document.write('<TITLE>' + title + '</TITLE>')
	OpenWindow.document.write('<BODY BGCOLOR=#ffffff>')
	OpenWindow.document.write(content)
	OpenWindow.document.write('</BODY>')
	OpenWindow.document.write('</HTML>')
	OpenWindow.document.close()
}

export function getMonthDays(year, month) {
	var thisDate = new Date(year, month, 0) //当天数为0 js自动处理为上一月的最后一天
	return thisDate.getDate()
}
export function elementsAttr(ele, vm) {
	return new Promise((resolve, reject) => {
		let nodes = uni.createSelectorQuery().in(vm).selectAll(ele)
		nodes.boundingClientRect(cur => {
			resolve(cur) //返回元素节点信息
		}).exec(res => {
			console.log(10, res) //回调
		})
	})
}

// 获取本月第一天
var firstDayOfMonth = function() {
	let date = new Date()
	date.setDate(1)
	return format(date.getTime(), 'yyyy-MM-dd')
}
// 获取本月最后一天
var lastDayOfMonth = function() {
	let date = new Date(Date.now())
	date.setDate(0)
	date.setMonth(date.getMonth() + 1)
	date.setDate(date.getDate() - 1)
	return format(date.getTime(), 'yyyy-MM-dd')
}
export { format, toTree, familyTree, replaceTo, firstDayOfMonth, lastDayOfMonth }